package com.design.FactoryVSStrategy.strategy;

/*
 * 来源： https://www.jianshu.com/p/78c4d93fab87   https://github.com/nezha/DesignPatterns
 * 重点祥述： https://www.imooc.com/article/11675#comment
 * 策略模式UML图.png：
 * Strategy（抽象策略角色）：封装了 每个算法必须有的算法和属性，由Context来调度。
 * StrategyA（具体策略角色）：实现了抽象策略定义的接口。
 * Context（封装角色）：将策略封装起来，屏蔽了调用者直接访问具体策略。
 *  意图：定义一系列算法，把他们一个个封装起来，并且使他们相互可以替换。本模式使得算法可以独立于使用它的客户而变化
 *
 * 拓展：https://nicky-chen.github.io/2018/05/06/strategy/
 */
public class ClientStrategy {
    public static void main(String args[]) {
        ContextFactory add = new ContextFactory(new AddStrategy());
        int addvalue = add.calculate(1, 1);
        System.out.println(addvalue);
        ContextFactory sub = new ContextFactory(new SubStrategy());
        int subvalue = sub.calculate(1, 1);
        System.out.println(subvalue);
    }
}
